package com.bls.blslib.base;

import com.bls.blslib.eventbus.Event;
import com.bls.blslib.eventbus.EventBusUtils;
import com.bls.blslib.view.LoadingDogDialog;
import com.google.gson.Gson;
import com.lzy.okgo.model.Response;
import com.lzy.okgo.request.base.Request;

import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

/**
 * 　　  () 　　　  ()
 * 　　  ( ) 　　　( )
 * 　　  ( ) 　　　( )
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　┃
 * 　　┃　　　┻　　　┃
 * 　　┗━┓　　　┏━┛
 * 　　　　┃　　　┃
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ——————————————————
 * Created by BinglingSu on 2017/12/20.
 */

public abstract class BaseActivity extends BaseRootActivity implements BaseView {
    protected BasePresenter presenter;  // presenter
    protected LoadingDogDialog loadingDogDialog;
    protected Gson gson;

    @Override
    protected void initRoot() {
        if (isRegisterEventBus()) {
            EventBusUtils.register(this);
        }
        presenter = new BasePresenter(this);
        loadingDogDialog = new LoadingDogDialog(getActivity());
        gson = new Gson();
    }

    @Override
    protected void initParams() {

    }

    @Override
    protected void initFvb() {

    }

    @Override
    protected void initTitle() {

    }

    @Override
    protected void initView() {
    }


    @Override
    protected void initListener() {

    }

    @Override
    protected void initData() {

    }

    @Override
    protected void initResume() {

    }

    @Override
    protected void initOnPause() {

    }

    @Override
    protected void initOnDestroy() {
        if (null != presenter) {
            presenter.onDestroy();
        }
        if (isRegisterEventBus()) {
            EventBusUtils.unregister(this);
        }
    }


    /**
     * 是否注册事件分发
     *
     * @return true绑定EventBus事件分发，默认不绑定，子类需要绑定的话复写此方法返回true.
     */
    protected boolean isRegisterEventBus() {
        return false;
    }

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onEventBusCome(Event event) {
        if (event != null) {
            receiveEvent(event);
        }
    }

    @Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
    public void onStickyEventBusCome(Event event) {
        if (event != null) {
            receiveStickyEvent(event);
        }
    }

    /**
     * 接收到分发到事件
     *
     * @param event 事件
     */
    protected void receiveEvent(Event event) {

    }

    /**
     * 接受到分发的粘性事件
     *
     * @param event 粘性事件
     */
    protected void receiveStickyEvent(Event event) {

    }


    @Override
    public void showOnStart(Request request, int requestId) {
        loadingDogDialog.show();
    }

    @Override
    public void showOnSuccess(int requestId, String responseBody, Response response) {

    }

    @Override
    public void showOnCacheSuccess(int requestId, String responseBody, Response response) {

    }

    @Override
    public void showOnError(int requestId, String responseBody, Response response) {

    }

    @Override
    public void showOnFinish(int requestId) {
        loadingDogDialog.dismiss();
    }
}
